package modelado.datos.elementos;

import java.util.*;

public abstract class ElementoAbstracto implements Elemento {

	private static int nc = 0;
	private Integer codigo;
	private String nombre;

	public ElementoAbstracto() {
		codigo = nc;
		nc++;
		nombre = codigo.toString();
	}

	public Integer getCodigo() {
		return codigo;
	}

	public String getNombre() {
		return nombre;
	}

	public int compareTo(Elemento o) {
		return codigo.compareTo(o.getCodigo());
	}

	public boolean equals(Object e) {
		boolean r = false;
		if (e instanceof Elemento) {
			Elemento e1 = (Elemento) e;
			r = codigo.equals(e1.getCodigo());
		}
		return r;
	}

	public int hashCode() {
		return codigo;
	}

	public Elemento clone() {
		Elemento e = null;
		try {
			e = (Elemento) super.clone();
		} catch (CloneNotSupportedException ex) {

		}
		return e;
	}

	public String toString() {
		return nombre;
	}

	public Iterator<Elemento> iterator() {
		return new IteratorPorDefecto(this);
	}

	private class IteratorPorDefecto implements Iterator<Elemento> {
		private Elemento e;
		private boolean a;

		public IteratorPorDefecto(Elemento e1) {
			e = e1;
			a = true;
		}

		public boolean hasNext() {
			return a;
		}

		public Elemento next() {
			a = false;
			return e;
		}

		public void remove() {
		}
	}
}
